package Tests;



public class Segmento {
	Evento rootControl;
	Evento SQS = new Evento();


	Segmento(Evento rootControl){
		this.rootControl = rootControl;
		SQS.anterior =SQS;
		SQS.derecho = SQS;
		SQS.izquierdo = SQS;
		SQS.siguiente = SQS;

	}
	public void agregarEvento(double start){
		Evento x = SQS;
		Evento y,z = null;
		while(start > x.siguiente.getTime() && x.siguiente != SQS)
			x = x.siguiente;
		y = x.siguiente;
		x.siguiente = new Evento();
		x.siguiente.setTime(start);
		if(x == SQS && y == SQS){
			/*
			 * ojo aqui me quede 6:00 pm del 7 de mayo
			 * necesitamos agregar al algoritmo como le va a hacer
			 * cuando sea nuevo el evento entonces tendria que ver como
			 * agregarlo al circulo del rootControl, ya que aqui
			 * estamos suponiendo que el root control no tiene mas
			 * segmentos
			 * pero que pasa si tuviera mas segmentos_???? hay que
			 * agregar el evento....es decir lo mismo que aqui en caso de que
			 * fueramos a sustituir un eventopotencial.
			 */
			z= rootControl;
			while(x.siguiente.getTime() > z.derecho.getTime() && z.derecho != rootControl)
				z = z.derecho;

			x.siguiente.derecho = z.derecho;
			x.siguiente.izquierdo = z;
			z.derecho.izquierdo = x.siguiente;
			z.derecho = x.siguiente;
			x.siguiente.eventoPotencial = true;
		}
		if(y.eventoPotencial == true){
			// is a potential event,
			// so de new event must interachange with the 
			//control too.
			z = y;
			
			if(z.getTime() < x.siguiente.getTime()){

				while(x.siguiente.getTime() > z.getTime() && z != rootControl)
					z = z.derecho;

			}else{
				while(x.siguiente.getTime() < z.getTime() && z.izquierdo != rootControl)
					z = z.izquierdo;
			}

		}


		y.anterior = x.siguiente;
		x.siguiente.anterior = x;
		y.anterior.siguiente = y;

		
		if(y.eventoPotencial == true){
			
			y.eventoPotencial = false;
			
			x.siguiente.eventoPotencial = true;
			//hay que poner el evento despues de z
			
			x = x.siguiente;
			x.izquierdo = z.izquierdo;
			z.izquierdo = x;
			x.izquierdo.derecho = x;
			x.derecho = z;

			//ahora hay que eliminar y en caso de que se haya sustiuido
			//por un evento menor, es decir en caso de que y.potential = true

			y.izquierdo.derecho = y.derecho;
			y.derecho.izquierdo =y.izquierdo;
			y.derecho = null;
			y.izquierdo = null;
	
			
		}




	}
}
